package com.molichuxing.services.infrastructure.dao;

import java.util.List;
import java.util.Map;

import org.apache.ibatis.annotations.Param;

import com.molichuxing.framework.dao.RootMapper;
import com.molichuxing.services.infrastructure.bean.StockCarBean;

/**
 * <p>
 * 库存车辆表 Mapper 接口
 * </p>
 *
 * @author liyg
 * @since 2019-08-20
 */
public interface StockCarMapper extends RootMapper<StockCarBean> {

	/**
	 * 获取库存信息
	 * 
	 * @param carId
	 * @return
	 */
	StockCarBean getStockByCarId(@Param("carId") Integer carId);

	/**
	 * 查询总条数
	 * 
	 * @param map
	 * @return
	 */
	long getPageCount(Map<String, Object> map);

	/**
	 * 分页查询列表数据
	 * 
	 * @param map
	 * @param pageNum 
	 * @param pageSize 
	 * @return
	 */
	List<StockCarBean> getPage(@Param("params")Map<String, Object> map, @Param("pageNum")Integer pageNum, @Param("pageSize")Integer pageSize);

	/**
	 * 修改库存信息
	 * 
	 * @param stockCarBean
	 * @return
	 */
	int updateById(StockCarBean stockCarBean);

	/**
	 * 修改库存信息
	 * 
	 * @param stockCarBean
	 * @return
	 */
	int updateStatusById(StockCarBean stockCarBean);

	/**
	 * 获取数量
	 * 
	 * @param status 
	 *            库存状态（1：待入库，2：已入库）
	 * @param inStockType
	 *            收车库类型（1：中转库，2：门店）  
	 * @param carIds 
	 *           车辆ids
	 * @param type 
	 *           入库类型（1：采购，2：调拨，3、拒收、4、收车）
	 * @return
	 */
	long getCount(@Param("status") Integer status,@Param("inStockType") Integer inStockType,@Param("carIds") List<Integer> carIds,@Param("type")Integer type);

	/**
	 * 修改库存信息
	 * 
	 * @param stockCarBean
	 * @return
	 */
	int updateInStockIdById(StockCarBean stockCarBean);

	/**
	 * 查询总条数
	 * @param map
	 * @return
	 */
	long getDealerListCount(Map<String, Object> map);

	/**
	 * 分页查询列表数据
	 * @param map
	 * @param pageNum
	 * @param pageSize
	 * @return
	 */
	List<StockCarBean> getDealerList(@Param("params")Map<String, Object> map, @Param("pageNum")Integer pageNum, @Param("pageSize")Integer pageSize);

	/**
	 * 查询信息
	 * @param carIds
	 * @return
	 */
	List<StockCarBean> getStockCars(@Param("carIds")List<Integer> carIds);

	/**
	 * 修改车辆运营状态
	 * @param carId
	 * @param carStatus
	 * @return
	 */
	int modifyCarStatus(@Param("carId")Integer carId,@Param("carStatus") Integer carStatus);

	/**
	 * 车辆调拨(修改库存信息 包含调拨说明)
	 * @param stockCarBean
	 * @return
	 */
	int updateAllotStock(StockCarBean stockCarBean);

	/**
	 * 查询总条数
	 * @param map
	 * @return
	 */
	long getReturnStockCarListCount(Map<String, Object> map);

	/**
	 * 分页查询列表数据
	 * @param map
	 * @param pageNum
	 * @param pageSize
	 * @return
	 */
	List<StockCarBean> getReturnStockCarList(@Param("params")Map<String, Object> map, @Param("pageNum")Integer pageNum, @Param("pageSize")Integer pageSize);

	/**
	 * 获取库存信息
	 * 
	 * @param carId 
	 *           车辆id
	 * @param stockIds 
	 *           仓库ids
	 * @return
	 */
	StockCarBean getStockCarByStockIds(@Param("carId") Integer carId,@Param("stockIds") List<Integer> stockIds);

	/**
	 * 根据车辆id查询车辆入店时间
	 * @param carId
	 * @return
	 */
	StockCarBean getStorageTime(@Param("carId") Integer carId);

	/**
	 * 查询库存列表导出数据
	 * @param map
	 * @return
	 */
	List<StockCarBean> getStockCarDownloadList(@Param("params") Map<String, Object> map);

	/**
	 * 查询库存列表导出数据总条数
	 * @param map
	 * @return
	 */
	Long getStockCarDownloadListCount(@Param("params") Map<String, Object> map);

	/**
	 * 查询 待出租 并且 为已入库 的车辆
	 * @return
	 */
	List<StockCarBean> getStockListByStatus();

	/**
	 * 根据车辆id修改围栏id
	 * @param carId
	 * @param fenceId
	 * @return
	 */
	int modifyFenceId(@Param("carId")Integer carId, @Param("fenceId")Integer fenceId);

	/**
	 * 修改车辆运营状态s
	 * @param carId
	 * @param carStatus
	 * @param fenceId
	 * @return
	 */
	int modifyCarStatusAndFenceId(@Param("carId")Integer carId, @Param("carStatus")Integer carStatus, @Param("fenceId")Integer fenceId);
   
}